//* Include Files
#ifndef TSchalterH
#define TSchalterH
#include "OWLComps.hpp"
#include "OWPins.hpp"
#include "TBauelement.h"
#include "TBauelementGUI.h"

class TBauelement;

/** Klasse realisiert Schalter.
 *
 *  @brief Fachklasse: Schalter
 *
 *  @author Sebastian Mueller
 *  @date 20.05.2012
 *
 *  @version 0.1
 *  Doxygen Kommentare hinzugefuegt
 */
class TSchalter : public TBauelement{

private:
	//* Variablendeklaration
	TOWBoolSourcePin* outputPin;

public:
	/** Konstruktor von TSchalter
	* Initialisiert die benoetigten Pins und Variablen
	* @param[in] owner Gibt den Besitzer/Parent des Gatters an
	*/
	__fastcall TSchalter(TComponent* owner);
	/** Destruktor von TSchalter
	* \n Free'd den benutzten OutputPin
	*/
	__fastcall ~TSchalter();

    /** Callback-Funktion fuer die Pins.
	* \n Wird allerdings nie aufgerufen
	* @param[in] pin Keine Angaben
	*/
	void __fastcall pinEvent(TOWBasicPin* pin);

   	/** Versucht die uebergebenen Pins zu verbinden.
	* @param[in] pin Pin der Klasse, welcher verbunden werden soll
	* @param[in] pinToConnectTo Pin zu dem die Verbindung aufgebaut werden soll
	* @return Erfolg: true \n
	*		  Misserfolg: false
	*/
	bool __fastcall connect(Pin pin, TOWBasicPin* pinToConnectTo);

	/** Gibt den gewuenschten Pin zurueck.
	* @param[in] pin Bestimmt welcher Pin zurueckgegeben werden soll
	* @return Erfolg: Referenz auf angeforderten Pin
	* \n Misserfolg: NULL
	*/
	void __fastcall disconnect(Pin pin);

	/** Setzt den OutputPin je nach Uebergabeparameter
	*
	* @param[in] state Zustand, auf den der OutputPin gesetzt werden soll
	*/
	void __fastcall setState(bool state);

	/** Gibt den gewuenschten Pin zurueck.
	* @param[in] pin Bestimmt welcher Pin zurueckgegeben werden soll
	* @return Erfolg: Referenz auf angeforderten Pin
	* \n Misserfolg: NULL
	*/
	TOWBasicPin* __fastcall getPin(Pin pin);

};

#endif
